#include <iostream>
using namespace std;

class AbstractDrinking
{
public:
  // 煮水
  virtual void Boil() = 0;
  // 冲泡
  virtual void Brew() = 0;
  // 倒入杯中
  virtual void PourInCup() = 0;
  // 加入辅料
  virtual void PutSomeThing() = 0;

  // 制作饮品
  void makeDrink()
  {
    Boil();
    Brew();
    PourInCup();
    PutSomeThing();
  }
};

class Coffee : public AbstractDrinking
{
public:
  // 煮水
  virtual void Boil()
  {
    cout << "煮农夫山泉" << endl;
  };
  // 冲泡
  virtual void Brew()
  {
    cout << "重复咖啡" << endl;
  };
  // 倒入杯中
  virtual void PourInCup()
  {
    cout << "倒入玻璃杯" << endl;
  };
  // 加入辅料
  virtual void PutSomeThing()
  {
    cout << "加入糖、奶" << endl;
  };
};

class Tea : public AbstractDrinking
{
public:
  // 煮水
  virtual void Boil()
  {
    cout << "煮农夫山泉" << endl;
  };
  // 冲泡
  virtual void Brew()
  {
    cout << "冲泡茶叶" << endl;
  };
  // 倒入杯中
  virtual void PourInCup()
  {
    cout << "倒入杯中" << endl;
  };
  // 加入辅料
  virtual void PutSomeThing()
  {
    cout << "加入糖、奶" << endl;
  };
};

void doWork(AbstractDrinking *abs)
{
  abs->makeDrink();
  delete abs;
}

void test01() {
  doWork(new Coffee);
  cout << "------------" << endl;
  doWork(new Tea);
}

int main(int argc, char const *argv[])
{
  test01();

  return 0;
}